Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | export interface SecurityIncident {
id: number;
user_id?: number;
username: string;
incident_type: string;
ip_address?: string;
user_agent?: string;
device_id?: string;
details?: string;
created_at: string;
}
export interface SecurityBan {
id: number;
user_id?: number;
username: string;
ban_type: string;
ban_reason: string;
ban_level: number;
banned_at: string;
expires_at?: string;
is_active: boolean;
created_by?: number;
}
export interface CreateSecurityBanRequest {
user_id?: number;
username: string;
ban_type: string;
ban_reason: string;
ban_level: number;
expires_at?: string;
created_by?: number;
}
export interface SecurityFilters {
incident_type?: string;
username?: string;
start_date?: string;
end_date?: string;
page?: number;
limit?: number;
}
export interface SecurityIncidentsResponse {
incidents: SecurityIncident[];
total: number;
page: number;
limit: number;
total_pages: number;
}
export interface SecurityBansResponse {
bans: SecurityBan[];
total: number;
page: number;
limit: number;
total_pages: number;
}
export interface SecurityStatsResponse {
total_incidents: number;
incidents_today: number;
active_bans: number;
permanent_bans: number;
incidents_by_type: IncidentTypeCount[];
recent_incidents: SecurityIncident[];
}
export interface IncidentTypeCount {
incident_type: string;
count: number;
}
export interface UnbanUserRequest {
reason: string;
}
export interface UserBanStatus {
is_banned: boolean;
ban?: SecurityBan;
}
// Constantes para tipos de incidentes
export const INCIDENT_TYPES = {
BRUTE_FORCE: 'BRUTE_FORCE',
SUSPICIOUS_ACTIVITY: 'SUSPICIOUS_ACTIVITY',
MULTIPLE_DEVICES: 'MULTIPLE_DEVICES',
TOKEN_MANIPULATION: 'TOKEN_MANIPULATION'} as const;
// Constantes para tipos de ban
export const BAN_TYPES = {
TEMPORARY: 'TEMPORARY',
PERMANENT: 'PERMANENT'} as const;
// Constantes para niveles de ban
export const BAN_LEVELS = {
FIRST: 1, // 20 minutos
SECOND: 2, // 72 horas
PERMANENT: 3, // Permanente
} as const;
// Mapeo de tipos de incidentes a descripciones legibles
export const INCIDENT_TYPE_LABELS: Record<string, string> = {
[INCIDENT_TYPES.BRUTE_FORCE]: 'Brute Force Attack',
[INCIDENT_TYPES.SUSPICIOUS_ACTIVITY]: 'Suspicious Activity',
[INCIDENT_TYPES.MULTIPLE_DEVICES]: 'Multiple Devices',
[INCIDENT_TYPES.TOKEN_MANIPULATION]: 'Token Manipulation'};
// Mapeo de niveles de ban a descripciones
export const BAN_LEVEL_LABELS: Record<number, string> = {
[BAN_LEVELS.FIRST]: 'Level 1 (20 minutes)',
[BAN_LEVELS.SECOND]: 'Level 2 (72 hours)',
[BAN_LEVELS.PERMANENT]: 'Level 3 (Permanent)'};
// Colores para diferentes tipos de incidentes
export const INCIDENT_TYPE_COLORS: Record<string, string> = {
[INCIDENT_TYPES.BRUTE_FORCE]: 'text-orange-600',
[INCIDENT_TYPES.SUSPICIOUS_ACTIVITY]: 'text-yellow-600',
[INCIDENT_TYPES.MULTIPLE_DEVICES]: 'text-blue-600',
[INCIDENT_TYPES.TOKEN_MANIPULATION]: 'text-purple-600'};
// Colores para niveles de ban
export const BAN_LEVEL_COLORS: Record<number, string> = {
[BAN_LEVELS.FIRST]: 'text-yellow-600',
[BAN_LEVELS.SECOND]: 'text-orange-600',
[BAN_LEVELS.PERMANENT]: 'text-red-600'};
|